home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / basic / qbnws101.zip / QBNW0101.NWS < prev    next >
Text File  |  1989-11-01  |  32KB  |  956 lines

  1.      Volume  1, Number  1                                 November  1, 1989
  2.  
  3.      
  4.      
  5.      
  6.      
  7.      
  8.      
  9.      
  10.      
  11.      
  12.      
  13.                    **************************************************
  14.                    *                                                *
  15.                    *                    QBNews                      *
  16.                    *                                                *
  17.                    *      International QuickBASIC Electronic       *
  18.                    *                  Newsleter                     *
  19.                    *                                                *
  20.                    *    Dedicated to promoting QuickBASIC around    *
  21.                    *                  the world                     *
  22.                    *                                                *
  23.                    **************************************************
  24.      
  25.      
  26.         The QBNews is an electronic newsletter published by QBNews. It can
  27.      be freely distributed providing NO CHARGE is charged for distribution.
  28.      All articles in QBNews are copyright by QBNews. All program code
  29.      appearing in QBNews is released into the public domain.  You may do
  30.      what you wish with the code except copyright it. QBNews must be
  31.      distributed whole and unmodified. Copyright (c) 1989 by QBNews.
  32.      
  33.      
  34.      
  35.      
  36.      
  37.      
  38.      
  39.      
  40.      
  41.      
  42.      
  43.      
  44.      
  45.      
  46.      
  47.      
  48.      
  49.      
  50.      
  51.      
  52.      
  53.      
  54.      
  55.      
  56.      
  57.      
  58.      
  59.      The QBNews                                                   Page    i
  60.      Volume  1, Number  1                                 November  1, 1989
  61.      ----------------------------------------------------------------------
  62.  
  63.                         T A B L E   O F   C O N T E N T S
  64.  
  65.      
  66.      1.  From the Editors Desk
  67.           The Mission of the QBNews by David Cleary ....................  1
  68.  
  69.      2.  Feature Presentation
  70.           What I Would Like To See by David Cleary .....................  3
  71.  
  72.      3.  Who ya gonna call? CALL INTERRUPT
  73.           QuickBASIC Directories by Hector Plasmic .....................  4
  74.  
  75.      4.  Under The Hood
  76.           Memory Moves with QB by David Cleary .........................  6
  77.  
  78.      5.  The Tool Shed
  79.           MicroHelp's QB Optimizer by Larry Stone ......................  7
  80.  
  81.      6.  Product Announcements
  82.           P.D.Q. .......................................................  9
  83.  
  84.      7.  The BUG Report
  85.           QB Quirks .................................................... 11
  86.  
  87.      8.  CTL-Z
  88.           Closing Comments by David Cleary ............................. 13
  89.  
  90.      9.  Address
  91.           Address ...................................................... 14
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.      The QBNews                                                   Page   ii
  120.      Volume  1, Number  1                                 November  1, 1989
  121.  
  122.  
  123.  
  124.      ----------------------------------------------------------------------
  125.                     F r o m   t h e   E d i t o r s   D e s k
  126.      ----------------------------------------------------------------------
  127.  
  128.      The Mission of the QBNews
  129.      by David Cleary
  130.      
  131.         Welcome to the first issue of the QBNEWS. With the growing
  132.      popularity of QuickBASIC, a newsletter was needed to help users get the
  133.      most out of the language. The QBNEWS has 3 goals. The first is to
  134.      inform people about what is out there as far as tools are concerned.
  135.      The second is to teach users how to get the most out of the QuickBASIC
  136.      product. And last but not least is to share code.
  137.      
  138.         To accomplish the first goal, the QBNews will contain a review of a
  139.      commercial or shareware product in every issue. Many times I have come
  140.      across a problem and I wasn't aware that the solution was available. We
  141.      hope to provide a fair review o f what is out there to let you make an
  142.      informed decision on whether the product will fit your needs. The
  143.      reviewers are actual users of the product just like you and me. They
  144.      will let you know if the product does what it says and report any
  145.      problems t o you. The QBNews will also contain new product
  146.      announcements from anybody who has a QuickBASIC related product to
  147.      announce. This will keep you informed as to what is happening on the
  148.      QuickBASIC scene.
  149.      
  150.         We will have a variety of features to help you get the most out of
  151.      QuickBASIC. Hector Plasmic will have a regular column on CALL
  152.      INTERRUPT. CALL INTERRUPT is one of the most powerful yet least
  153.      understood features in QuickBASIC. With Hector's help, you will learn
  154.      how to use it and you will get code that you can plug directly into
  155.      your programs to access DOS and BIOS system calls. Another feature that
  156.      will appear from time to time is UNDER THE HOOD. This will feature ways
  157.      to access interna l QuickBASIC routines to get power you thought you
  158.      had to go to third party assembly libraries to get.
  159.      
  160.         Now comes the good part. The CODE. We want to include as much code
  161.      as possible. You can either choose to use this code as is, or even
  162.      better, learn what it is doing and come up with improvements. I would
  163.      like to see the development of real ap plications from start to finish
  164.      that span issues. I also want to see lots of contributions from all you
  165.      out there with useful subroutines that you feel everyone would benefit
  166.      from. All code published in the QBNEWS is put into the public domain.
  167.      That means you can do whatever you want with it except copyright it. If
  168.      we all work together to learn and share, we can make QB the language of
  169.      the 90's. Every QB user will benefit by expanding the popularity of
  170.      QuickBASIC and the best way to do that will be to knock down the "YOU
  171.      CAN'T DO THAT WITH BASIC" walls.
  172.      
  173.         In order for this newsletter to succeed, we need your help.  Believe
  174.      it or not, writing is one of my least favorite activities. This
  175.      newsletter is going to die without contributions from YOU. This is both
  176.      code AND feature articles. Also we nee d suggestions on what you want
  177.      to see in future issues. QBNEWS is going to start out being published
  178.      once every two months. If I see some support, we can make it a monthly.
  179.      
  180.      The QBNews                                                     Page  1
  181.      Volume  1, Number  1                                 November  1, 1989
  182.  
  183.      You don't have to be an expert at QuickBASIC to contribute either. The
  184.      only t hing I ask is NO LINE NUMBERS PLEASE <grin>. As Bartles and
  185.      James say, "Thank you for you support."
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.      The QBNews                                                     Page  2
  239.      Volume  1, Number  1                                 November  1, 1989
  240.  
  241.  
  242.  
  243.      ----------------------------------------------------------------------
  244.                      F e a t u r e   P r e s e n t a t i o n
  245.      ----------------------------------------------------------------------
  246.  
  247.      What I Would Like To See
  248.      by David Cleary
  249.      
  250.         This is our FEATURE section. It is a little bare in this issue
  251.      though. What I want to see in this section is a group of articles all
  252.      pertaining to a chosen topic. To achieve this, I need people who want
  253.      to write these articles. Since I started this newsletter, I am choosing
  254.      the next Feature Presentation. I want articles on how to use the
  255.      various tools that Microsoft supplies with their languages. These
  256.      should be tutorials on how to use them and any tips you might have
  257.      stumbled across while using them. I still don't know how to use every
  258.      feature of the QB debugger and I know there are quite a few out there
  259.      who don't know how to compile and link from the command line. Not all
  260.      of these tools are provided with QuickBASIC but they do come in handy
  261.      sometimes. The tools I want to cover are
  262.      
  263.      BC.EXE
  264.      LIB.EXE
  265.      LINK.EXE
  266.      QB Debugger
  267.      Codeview
  268.      HelpMake
  269.      NMake
  270.      Exemod and the like
  271.      
  272.         This list could be expanded if I have left out anything. If you are
  273.      interested, read the final notes on how to reach me. Thank you.
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.      The QBNews                                                     Page  3
  299.      Volume  1, Number  1                                 November  1, 1989
  300.  
  301.  
  302.  
  303.      ----------------------------------------------------------------------
  304.         W h o   y a   g o n n a   c a l l ?   C A L L   I N T E R R U P T
  305.      ----------------------------------------------------------------------
  306.  
  307.      QuickBASIC Directories
  308.      by Hector Plasmic
  309.      
  310.         While QuickBASIC has a lot of features, there are a few it lacks.
  311.      Ever wanted to do a directory search?  Chances are you had to Shell to
  312.      DOS, create a temporary file by redirecting the DIR command, then
  313.      return to QB and read the file line-by-line, parsing out the filenames.
  314.      Either that or you resorted to a third-party library function.  It's
  315.      not necessary.  QB can be cajoled into doing directory searches by
  316.      utilizing the DOS directly via Interrupt.
  317.      
  318.         Interrupt 21h functions 4Eh and 4Fh do find-first-match and
  319.      find-next-match respectively.  If the call to these functions is
  320.      successful, information on the matched file is placed by DOS into the
  321.      current DTA (disk transfer area) as follows:
  322.      
  323.        Bytes 0-20   =   (reserved, used during findnext calls by DOS)
  324.        Byte 21      =   attribute of matched file
  325.        Bytes 22-23  =   file time
  326.        Bytes 24-25  =   file date
  327.        Bytes 26-27  =   least significant word of file size
  328.        Bytes 28-29  =   most significant word of file size
  329.        Bytes 30-42  =   filename and extension in form of ASCIIZ string
  330.      
  331.         All this brings up another question:  where is the current DTA?  The
  332.      answer is given by a call to interrupt 21h function 2Fh, which returns
  333.      the DTA's offset in BX and the segment in ES.
  334.      
  335.      So, we make a call to interrupt 21h with register .ah set to 2Fh like
  336.      this:
  337.      
  338.        InRegs.AX = &H2F * 256 'Remember, .ah is the high-byte of .ax
  339.        INTERRUPTX &H21, InRegs, OutRegs
  340.      
  341.      And retrieve the returned information:
  342.      
  343.        DTASeg = OutRegs.ES            'Segment of current DTA
  344.        DTAOff = OutRegs.BX            'Offs of current DTA
  345.      
  346.      If we now say DEF SEG = DTASeg we can directly PEEK into the DTA,
  347.      wherever it may be.
  348.      
  349.      Okay, we know where the data will be, now how do we get it there?  Like
  350.      this:
  351.      
  352.        FLName$ = "*.*" + CHR$(0)     'ASCIIZ filespec (null terminated)
  353.        InRegs.AX = &H4E * 256        'Which function (4Eh)
  354.        InRegs.CX = 0                 'Attribute (normal)
  355.        InRegs.DS = VARSEG(FLName$)   'Segment of ASCIIZ filename
  356.        InRegs.DX = SADD(FLName$)     'Offset of ASCIIZ filename
  357.        InterruptX &H21, InRegs, OutRegs
  358.      
  359.      The QBNews                                                     Page  4
  360.      Volume  1, Number  1                                 November  1, 1989
  361.  
  362.      
  363.         This calls interrupt 21h function 4Eh and places the information on
  364.      the first matched file into the DTA.  There's a catch, though.  There
  365.      may not be a matching file.  If there isn't, this function returns an
  366.      error by setting the carry flag and returning a code in AX.  We can
  367.      check for this with:
  368.      
  369.        IF OutRegs.Flags AND 1 THEN WhichError = OutRegs.AX
  370.      
  371.      The two possible errors are "invalid path" (2h) and "no (more) matching
  372.      file(s)" (12h).
  373.      
  374.      Now all that remains is to PEEK the information out of the DTA and do
  375.      something useful with it.
  376.      
  377.      FINDEM.BAS is a sample program together with a Function FindFirst that
  378.      will do directory searches for you.  Modify the main module code to
  379.      load the filenames into an array or whatever you need it to do.
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.      The QBNews                                                     Page  5
  418.      Volume  1, Number  1                                 November  1, 1989
  419.  
  420.  
  421.  
  422.      ----------------------------------------------------------------------
  423.                            U n d e r   T h e   H o o d
  424.      ----------------------------------------------------------------------
  425.  
  426.      Memory Moves with QB
  427.      by David Cleary
  428.      
  429.              This is a section that will appear from time to time if the
  430.      information presents itself. Although not support certain functions
  431.      directly, QuickBASIC does have internal routines that can be very
  432.      helpfull. When using internal QuickBASIC routine s, you must use the
  433.      DECLARE statement and give the routine an ALIAS. This is because the
  434.      routines internal to QB have names that are not allowed in QuickBASIC.
  435.      This is mostly because they contain either the $ or _ characters within
  436.      them. The only pro blem when using internal QB routines is that I
  437.      haven't found a way to use them in the environment.
  438.      
  439.              The routine we are going to learn about today is called B$ASSN.
  440.       QuickBASIC uses this routine for a number of things. Among them is
  441.       copy userdefined types to each other and copy fixed length strings to
  442.       variable length strings. What we will use it for is to copy a block of
  443.       memory to another location. The syntax for B$ASSN is:
  444.      
  445.      B$ASSN(FromSeg, FromOfs, NumBytes, ToSeg, ToOfs, NumBytes1)
  446.      
  447.      In order to use it in a QB program, we need to use the following
  448.      DECLARE statement:
  449.      
  450.      DECLARE SUB MemMove ALIAS "B$ASSN" (BYVAL FSeg%, BYVAL FOfs%,_
  451.              BYVAL Bytes1%, BYVAL TSeg%, BYVAL TOfs%, BYVAL Bytes2%)
  452.      
  453.              You can change the name MemMove to whatever you like. The
  454.      program SCRNSUBS.BAS show how to use this routine to save and restore
  455.      screens. This routine is very efficient in doing this paticular job but
  456.      because of other things it has to do, it w ill bring all the string
  457.      handling routines into your program. So, if you are planning on using
  458.      this routine in a program that already uses the string handling
  459.      routines, there will be no effect on file size. If you don't use the
  460.      same number of bytes, QB will truncate it. Be carefull not to destroy
  461.      memory by writing where you don't belong.
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.      The QBNews                                                     Page  6
  478.      Volume  1, Number  1                                 November  1, 1989
  479.  
  480.  
  481.  
  482.      ----------------------------------------------------------------------
  483.                             T h e   T o o l   S h e d
  484.      ----------------------------------------------------------------------
  485.  
  486.      MicroHelp's QB Optimizer - How to Save Some Bytes
  487.      by  Larry Stone
  488.      
  489.         It seems that MicroHelp, Inc. releases a new library for QB at the
  490.      rate of one every other week.  Their latest release is "QB/Pro Volume
  491.      7" or, for short, "QB Optimizer".
  492.      
  493.         The QB Optimizer is comprised of four exe files: PP.EXE - the pre-
  494.      processor, OPT.EXE - the optimizer, XREF.EXE - the cross-reference
  495.      utility, CHECKX.EXE - to inform you which XModules can be linked with
  496.      your programs.
  497.      
  498.         The package also includes seven XModules used to link with your
  499.      programs to reduce exe size, three object modules to set various screen
  500.      displays, one object module used as a replacement for QB's INKEY$
  501.      function, one object module used to replace QB's LOCATE command, one
  502.      link library to use in lieu of the supplied object modules, one QLB
  503.      library for use with QB's environment, and some sample programs to get
  504.      you started.
  505.      
  506.         Question:  Does MicroHelp give you all you need to effectively use
  507.      the QB Optimizer?  Answer: No!  If, for example, you desire to use the
  508.      XFLOAT module to reduce your program by 9386 bytes and you have used
  509.      QB's VAL or STR$ functions, then you must buy MicroHelp's "QB/Pro
  510.      Volume 2".  If your program uses QB's PRINT USING then you need to buy
  511.      MicroHelp's "Mach 2" package.
  512.      
  513.         Because MicroHelp has produced some outstanding packages for
  514.      compiled BASIC programs, I already had these packages and, therefore,
  515.      incurred no additional expense.  However, I was dissapointed when I
  516.      discovered in the manual that I could not use the XFLOAT module if my
  517.      programs use QB's SETMEM command.
  518.      
  519.         If you are developing a TSR program in QB 4.x and link it with
  520.      MicroHelp's Stay-Res module (an excellent buy), you *MUST* use SETMEM
  521.      to re-allocate your dynamic arrays to the bottom of the heap.  I write
  522.      TSR programs using Stay- Res and would love to reduce their size by
  523.      another 9386 bytes.  But no can do because the XFLOAT object cannot
  524.      work with SETMEM.  MicroHelp's "Volume 2" has one outstanding ditty
  525.      called, "MhCopy" which opens up all available DOS or EMS memory, reads
  526.      your file into this free memory, then copies it to your designated
  527.      location.  It is a faster procedure than the DOS COPY command and
  528.      returns error codes that can be acted upon without error trapping.  It
  529.      requires SETMEM.  Need I say more?  When I called MicroHelp and
  530.      complained, they informed me that no one else seems to be upset about
  531.      this and therefore, they don't intend to add a replacement for SETMEM.
  532.      If you use MicroHelp products, give them a call and ask for a
  533.      replacement for SETMEM.
  534.      
  535.         Do the XModules work?  Well, I tried it with their supplied example
  536.      called, FULLCUR.BAS and it bombed.  XFLOAT gave me a duplicate
  537.      
  538.      The QBNews                                                     Page  7
  539.      Volume  1, Number  1                                 November  1, 1989
  540.  
  541.      definition error with a procedure already in existence in my
  542.      BCOM40.LIB.  XINPUT.OBJ does not work without XINTS.OBJ and XINTS.OBJ
  543.      caused my program to lock up my system.  When I linked without the
  544.      offending modules, my exe size was cut in half.
  545.      
  546.         I contacted MicroHelp about this problem, and, as always, their
  547.      support was above and beyond what most other companies would offer.  As
  548.      instructred, I returned my diskette and one week later my diskette was
  549.      returned with their latest routines and a nice letter.  The letter
  550.      informed me that QB Optimizer would not work with the QB 4.00 libraries
  551.      and that I needed to have Microsoft send me version 4.00b.  I
  552.      immediately ordered my free update from Microsoft.
  553.      
  554.         If all the modules worked for me, the final exe size of the FULLCUR
  555.      program should have been 3343 bytes using BC 4.00b (3311 using BC
  556.      4.50).
  557.      
  558.         What I did like about this package was PP.EXE - very nice.
  559.      CHECKX.EXE is also a slick program - it worked as expected.  OPT.EXE
  560.      was, in my opinion, useless - I already write readable, structured
  561.      code.  The XREF.EXE utility seems a little cumbersome to use - I think
  562.      its most useful feature is as a utility to "weed out" variables that
  563.      are assigned and never used.
  564.      
  565.         Who should use this package?  As MicroHelp states in their manual,
  566.      "The XModules are not for use by the 'faint of heart'.  This means that
  567.      if you are not proficient with programming in QB, you should not
  568.      consider buying this package.
  569.      
  570.         Do I like the QB Optimizer?  Even without the ability to work with
  571.      SETMEM, there are many applications that I could write that would
  572.      benefit with the Optimizer.  If you are presently using MicroHelp asm
  573.      libraries for your QB programs, the Optimizer is a must.
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.      The QBNews                                                     Page  8
  597.      Volume  1, Number  1                                 November  1, 1989
  598.  
  599.  
  600.  
  601.      ----------------------------------------------------------------------
  602.                     P r o d u c t   A n n o u n c e m e n t s
  603.      ----------------------------------------------------------------------
  604.  
  605.      P.D.Q  QuickBASIC Replacement Library
  606.      $99.00
  607.      Cresent Software
  608.      11 Grandview Ave.
  609.      Stamford, CT 06905
  610.      203-846-2500
  611.      
  612.         P.D.Q. is a replacement linking library for use with Microsoft
  613.      QuickBASIC version 4.0 or later. When a compiled BASIC program is
  614.      linked with PDQ.LIB instead of the usual BCOM library supplied with
  615.      QuickBASIC, the .EXE file size will be reduced dramat ically. Code size
  616.      reductions of six to one are typical for small source files, however
  617.      the actual improvement will of course depend on the individual program.
  618.      Program execution speed when using P.D.Q. will likewise be greatly
  619.      improved. Applications t hat have been linked with P.D.Q. will be
  620.      noticeably smaller than an equivalent written in C, and will in fact be
  621.      closer to pure assembly language.
  622.      
  623.         P.D.Q. also features a number of important language extensions,
  624.      including TSR program support and interrupt handling. Writing TSR
  625.      programs and interrupt handlers usually requires an extensive knowledge
  626.      of assembly language, however P.D.Q. includes a full compliment of
  627.      routines that allow you to do this using only QuickBASIC commands and
  628.      simple extensions. Many other important features are provided with
  629.      P.D.Q., and we will get to those shortly.
  630.      
  631.         The primary purpose of P.D.Q. is to create .EXE programs that are as
  632.      small and fast as possible. There is virtually no error checking beyond
  633.      simple syntax errors which are caught at compile time. However, because
  634.      P.D.Q. is based on Microsoft QuickBAS IC, programs may also be
  635.      developed and tested in the more secure enviroment BASIC offers, and
  636.      then linked for maximum efficiency using the P.D.Q. library once they
  637.      are working correctly.
  638.      
  639.         P.D.Q. has been designed as a subset of the recognized industry
  640.      standard BASIC that has been established by Microsoft. Programs that
  641.      are created using P.D.Q. are inherently "well-behaved", and may thus be
  642.      run under operating systems such as Microsoft Windows and DesqView
  643.      without any additional effort.
  644.      
  645.         Some programmers, paticularly those who don't ordinarily program in
  646.      BASIC, may wonder why we would select BASIC as the core language for
  647.      P.D.Q. Simply put, BASIC is the easiest of all the high-level languages
  648.      to use, and nearly every programmer is al ready familiar with it.
  649.      Microsoft QuickBASIC provides all of the features necessary for modern,
  650.      structured programming. Further, the BC.EXE compiler supplied with
  651.      QuickBASIC is as powerful and capable as any available language
  652.      compiler. P.D.Q. progra ms may be written and debugged in the
  653.      convenient enviroment QuickBASIC offers, and then linked for maxium
  654.      performance when creating the final program.
  655.      
  656.      
  657.      The QBNews                                                     Page  9
  658.      Volume  1, Number  1                                 November  1, 1989
  659.  
  660.         Our goal in designing P.D.Q. was to place code size and execution
  661.      speed above all other considerations. Many of QuickBASIC's most
  662.      advanced features are not included, and some commands have been
  663.      implemented in a slightly different manner. Therefore, w e'll begin by
  664.      looking at what has been omitted. Please understand that in all cases
  665.      where a QuickBASIC feature is not supported, the improvement in speed
  666.      or code size was the deciding factor. The primary purpose of P.D.Q. is
  667.      to create extremely small programs that execute very quickly. If you
  668.      intend to write a mojor accounting program or relational database, you
  669.      will probably be better off using regular QuickBASIC.
  670.      
  671.         P.D.Q. provides no support for floating point numbers -- only
  672.      integers and long integers may be used. However, fixed point numbers
  673.      may be accommodated by treating them as long integers, and then
  674.      formatting them when needed. A special routine (Dollar$ ) is provided
  675.      precisely for this purpose. There is no built-in support for graphics.
  676.      Though you can easily switch the PC's screen to any of the graphics
  677.      modes supported by the hardware, we have not provided library routines
  678.      for drawing lines, boxes, or circles. These may be added in a future
  679.      version of P.D.Q., but if those features are needed now, other third-
  680.      party packages are available. We are about to add a full set of
  681.      communications routines. These will provide enhanced features over
  682.      what is built into QuickBASIC.
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.      The QBNews                                                     Page 10
  716.      Volume  1, Number  1                                 November  1, 1989
  717.  
  718.  
  719.  
  720.      ----------------------------------------------------------------------
  721.                            T h e   B U G   R e p o r t
  722.      ----------------------------------------------------------------------
  723.  
  724.      QB Quirks
  725.      Reprinted from QUIRKS.ARC from MicroHelp, Inc.
  726.      
  727.      This section contains exerts from Quirks.arc. This file probably is the
  728.      most comprehensive bug report on QB. We will include all new bugs in
  729.      this newsletter as they come up. We will also include interesting
  730.      quirks.
  731.      
  732.      This file is maintained by Mark Novisoff of MicroHelp, Inc. Much of the
  733.      information was contributed by members of MicroHelp's BASIC Users
  734.      Group, users of the MSSYS forum on Compuserve and users of Mach 2,
  735.      Stay-Res, The MicroHelp Toolbox and the QB/Pro Professional series.
  736.      
  737.      If you have additional information that should be added, please send it
  738.      to:
  739.           Mark Novisoff
  740.           MicroHelp, Inc.
  741.           4636 Huntridge Drive
  742.           Roswell GA 30075
  743.           Compuserve ID 73047,3706 in MSSYS (Microsoft Systems Forum)
  744.      
  745.      If possible, please include a *small* sample program that will
  746.      demonstrate the problem and cause it to happen whenever the program is
  747.      run.
  748.           _____________________________________________________________
  749.      
  750.      Using CALL with literals takes lots of stack space.  (89/10/10)
  751.      
  752.              ' Demonstrate the effect on stack space when using literals
  753.              ' in CALL statements.
  754.      
  755.              ' First, run the program as is and note the low point for
  756.              ' stack space. Then REM the line with variables in the CALL
  757.              ' and unREM the line with literals and run the program again.
  758.      
  759.              ' Note that the low stack point is ten bytes lower when
  760.              ' literals are used. In a large program with a lot of CALL
  761.              ' statements, this can really add up.
  762.      
  763.              DEFINT A-Z
  764.              PRINT "Lowest amount of stack space before CALL:"; FRE(-2)
  765.              A% = 1
  766.              B% = 2
  767.              C% = 3
  768.              D% = 4
  769.              E% = 5
  770.              ' REM next line for second pass
  771.              CALL TestStack(A%, B%, C%, D%, E%)
  772.              ' UNREM next line for second pass
  773.              'CALL TestStack(1, 2, 3, 4, 5)
  774.              PRINT "Lowest amount of stack space after CALL:"; FRE(-2)
  775.      
  776.      The QBNews                                                     Page 11
  777.      Volume  1, Number  1                                 November  1, 1989
  778.  
  779.      
  780.      SUB TestStack (A%, B%, C%, D%, E%)
  781.      
  782.      END SUB
  783.           _____________________________________________________________
  784.      
  785.      Sample program #35. Demonstrates a problem using SWAP and CONST in QB
  786.      4.50 (89/09/07)
  787.      
  788.      ** Warning - this program will crash your system **
  789.      
  790.      Load the following program into QB4.50 and press F5:
  791.      
  792.        const Nul$=""
  793.        z$="hello"
  794.        swap z$,Nul$
  795.      
  796.      QB4.50 gives different results, depending on if Nul$ is "" or has a
  797.      length.
  798.      
  799.      QB4.00b correctly traps the error of trying to SWAP a constant.
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.      The QBNews                                                     Page 12
  835.      Volume  1, Number  1                                 November  1, 1989
  836.  
  837.  
  838.  
  839.      ----------------------------------------------------------------------
  840.                                     C T L - Z
  841.      ----------------------------------------------------------------------
  842.  
  843.      Closing Coments
  844.      by David Cleary
  845.      
  846.         Well, the first issue of the QBNews is done. To tell you the truth,
  847.      I am a little disappointed. I don't feel that this issue has fufilled
  848.      its mission but it is a start. I am hoping by getting this off the
  849.      ground, an overwhelming amout of support will start to flow. We need
  850.      code. We need articles. We need your help! Special thanks to Larry
  851.      Stone and Hector Plasmic who have given their time to write articles. I
  852.      know that Microsoft has sold over 500,000 copies of quickBASIC so if
  853.      only .005 % of these users contributed something to this newsletter, we
  854.      would be a big success. In the next issue, look for Reader Mail along
  855.      with the Swap Shop. The Swap Shop will comprise of small useful
  856.      subroutines that you readers have sent in. We need more code for this
  857.      newsletter and its got to come from you.
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.      The QBNews                                                     Page 13
  895.      Volume  1, Number  1                                 November  1, 1989
  896.  
  897.  
  898.  
  899.      ----------------------------------------------------------------------
  900.                                   A d d r e s s
  901.      ----------------------------------------------------------------------
  902.  
  903.      
  904.      If you wish to submit something for publication in the QBNews, you can
  905.      reach me in a number of ways. By U.S. Mail
  906.      
  907.       David Cleary
  908.       Lakeview Terrace Ext.
  909.       Sandy Hook, CT 06842
  910.      
  911.      The QBNews will have a PO Box by the next issue. I can also be reached
  912.      on FIDONET at 1:141/730, Compuserve as 76510,1725, Prodigy as HSRW18A,
  913.      and on the QUIK_BAS Echo.
  914.      
  915.      If you want to announce a new shareware or commercial product in the
  916.      QBNews, submit it as an ASCII file. Keep it under 70 lines and make it
  917.      an announcement and not a review. If you would like to review a
  918.      commercial or shareware product, contact me first so we don't have more
  919.      than one person writing the same review.
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.      The QBNews                                                     Page 14
  955.  
  956.